It's common practice for operating systems to provide a “debugging” capability to application developers, whereby the user is given special access to application internals while the application is executing, in order to aid the user in finding application programming errors or “bugs”. However, in certain situations, such mechanisms can be abused to access internal application data and internal state information that may be considered sensitive. For example, an application may be processing financial information, PIN codes, passwords, cryptography secrets, or the like, and the application (or developer thereof) may desire the user not be able to witness or access any of the application's internal state information, internal data, and other sensitive information or data.
Programmers of applications or apps for use in mobile devices, typically use application debugging and monitoring tools during application creation time to test whether an application behaves correctly. Once an application is released to typical usage environment on a mobile device (rather than a development environment), the ability to debug the application becomes less necessary. Further, in various types of applications, application debugging should be almost or completely denied, for example, for security-sensitive applications such as banking applications that handle sensitive financial data, where debugging mechanisms may pose a security risk. In particular, debugging mechanisms may compromise the security controls of the security-sensitive application and potentially allow an external entity to affect the execution of the application. As merely an example, debugging mechanisms could allow a malicious software application to attack a financial application and to gain private information usable for fraud, identity theft, or the like.
Thus the application (or developer thereof) may wish to ensure the application is not debuggable (referred to as “anti-debugging” or simply “anti-debug” in the industry), or is otherwise tamper-resistant.
It would therefore be useful to have an operation built in to an application or an operating system that would inhibit the debugging effort of a released application. Such a system would provide application developers, users of devices and managers of such devices some certainty that an application cannot be manipulated to overcome security or otherwise damage or maliciously attack the device, its operating system, sensitive information and files and other aspects of those things connected to the device or used by the users thereof.